/*
 * Copyright 2010 Christoph Widulle (christoph.widulle@googlemail.com)
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the
 * License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS"
 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */



package com.android1.amarena2d.nodes.behavior.delegates;

import com.android1.amarena2d.commons.Function;
import com.android1.amarena2d.commons.Functions;
import com.android1.amarena2d.engine.LifecycleListener;

import java.util.ArrayList;

public class LifecycleObserverDelegate implements LifecycleObserver {

    private final ArrayList<LifecycleListener> listeners = new ArrayList<LifecycleListener>();

    @Override
    public void register(LifecycleListener listener) {
        listeners.add(listener);
    }

    @Override
    public void unregister(LifecycleListener listener) {
        listeners.remove(listener);
    }

    public void onInit() {
        populate(Functions.Lifecycle.Listener.Init);
    }

    public void onDispose() {
        populate(Functions.Lifecycle.Listener.Dispose);
    }

    public void onExit() {
        populate(Functions.Lifecycle.Listener.Exit);
    }

    public void onEnter() {
        populate(Functions.Lifecycle.Listener.Enter);
    }

    private void populate(Function<LifecycleListener, Void> func) {
        if (listeners.size() > 0) {
            for (int i = 0; i < listeners.size(); i++) {
                LifecycleListener lifecycleListener = listeners.get(i);
                func.exec(lifecycleListener);
            }
        }
    }


}
